﻿using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Data;
using Negocio.Generico;
using Negocio.View.Base;
using System;


namespace Negocio.View
{

    public class ClaseView : ViewBase
    {

        #region Singleton

        private static ClaseView instance;

        private ClaseView()
        {
            //constructor vacio
        }

        [MethodImpl(MethodImplOptions.Synchronized)]
        public ClaseView GetInstance()
        {
            if (instance == null)
            {
                instance = new ClaseView();
            }
            return instance;
        }

        #endregion

        #region Constantes

        /// <summary>
        /// Fecha asociada a la clase
        /// </summary>
        private const string FECHA = "FECHA";

        /// <summary>
        /// Codigo de la asignatura a la que pertenece la clase
        /// </summary>
        private const string CODIGOASIGNATURA = "CODIGOASIGNATURA";

        /// <summary>
        /// Explicacion de la clase
        /// </summary>
        private const string EXPLICACION = "EXPLICACION";

        /// <summary>
        /// Titulo de la clase
        /// </summary>
        private const string TITULO = "TITULO";

        /// <summary>
        /// Codigo de la clase
        /// </summary>
        private const string CODIGOCLASE = "CODIGOCLASE";

        #endregion

        #region View

        /// <summary>
        /// Obtiene un listado sin parametros de las clases
        /// </summary>
        /// <returns>DataView contendor de las clases</returns>
        public DataView GetClases() 
        {
            return this.GetClases(new ClaseDTO());
        }

        /// <summary>
        /// Funcion que devuelve un dataview con los datos obtenidos de la busqueda filtrada
        /// </summary>
        /// <param name="filtro">Objeto que contiene todos los paramtros para filtrar la busqueda</param>
        /// <returns>DataView con todos los resultados</returns>
        public DataView GetClases(ClaseDTO filtro)
        {
            try
            {
                DataView dv = new DataView();
                DataTable dt = new DataTable();

                dt.Columns.Add(ClaseView.FECHA, this.GetTypeSqlDateTime);
                dt.Columns.Add(ClaseView.CODIGOASIGNATURA, this.GetTypeSqlInt32);
                dt.Columns.Add(ClaseView.EXPLICACION, this.GetTypeString);
                dt.Columns.Add(ClaseView.TITULO, this.GetTypeString);
                dt.Columns.Add(ClaseView.CODIGOCLASE, this.GetTypeSqlInt32);

                using (Negocio.Generico.ContratoGenericoClient servicio = new ContratoGenericoClient())
                {
                    foreach (ClaseDTO bean in servicio.Get(filtro))
                    {
                        DataRow dr = dt.NewRow();
                        dr[ClaseView.FECHA] = bean.Fecha;
                        dr[ClaseView.CODIGOASIGNATURA] = bean.CoAsignatura;
                        dr[ClaseView.EXPLICACION] = bean.Explicacion;
                        dr[ClaseView.TITULO] = bean.Titulo;
                        dr[ClaseView.CODIGOCLASE] = bean.CoClase;
                        dt.Rows.Add(dr);
                    }

                }
                
                return dt.DefaultView;
            }
            catch (Exception ex)
            {
                throw new ViewException(ex);
            }
        }

        #endregion

    }
}